package util;

import entity.User;
import service.DataService;
import service.impl.DataServiceImpl;

import java.util.HashMap;
import java.util.Map;

/**
 * 线程管理工具
 * 用于管理每个用户的接收Socket
 *
 * @author Mr.Alpaca
 * @version 1.0.0
 */
public class ThreadManagement {
    /**
     * 所有用户的监听消息线程
     */
    private static final Map<Long, Thread> USER_THREAD_MAP;
    /**
     * 服务类
     */
    private static final DataService SERVICE = DataServiceImpl.getService();

    static {
        USER_THREAD_MAP = new HashMap<>(16);
    }

    /**
     * 为当前用户创建一个持续监听消息的线程
     *
     * @param user 用户
     */
    public static void startReceiveThread(User user) {
        Thread thread = USER_THREAD_MAP.get(user.getId());
        // 线程已创建并启动时不需另开线程
        if (thread != null) {
            return;
        }
        // 创建接收线程,持续监听消息
        thread = new Thread(() -> {
            while (true) {
                SERVICE.receive(user);
            }
        }, "userId--" + user.getId());
        thread.start();
        USER_THREAD_MAP.put(user.getId(), thread);
    }
}
